"""公共视图模块

定义通用的视图函数，包括错误处理页面。
"""

from django.shortcuts import render
from django.http import JsonResponse
from rest_framework import status
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response import Response


def bad_request(request, exception=None):
    """400错误处理视图
    
    处理客户端请求错误。
    """
    return JsonResponse({
        'error': 'Bad Request',
        'message': '请求参数错误',
        'status_code': 400
    }, status=status.HTTP_400_BAD_REQUEST)


def permission_denied(request, exception=None):
    """403错误处理视图
    
    处理权限拒绝错误。
    """
    return JsonResponse({
        'error': 'Permission Denied',
        'message': '没有访问权限',
        'status_code': 403
    }, status=status.HTTP_403_FORBIDDEN)


def page_not_found(request, exception=None):
    """404错误处理视图
    
    处理页面未找到错误。
    """
    return JsonResponse({
        'error': 'Not Found',
        'message': '请求的资源不存在',
        'status_code': 404
    }, status=status.HTTP_404_NOT_FOUND)


def server_error(request):
    """500错误处理视图
    
    处理服务器内部错误。
    """
    return JsonResponse({
        'error': 'Internal Server Error',
        'message': '服务器内部错误',
        'status_code': 500
    }, status=status.HTTP_500_INTERNAL_SERVER_ERROR)


@api_view(['GET'])
@permission_classes([AllowAny])
def health_check(request):
    """健康检查端点
    
    用于检查API服务是否正常运行。
    """
    return Response({
        'status': 'healthy',
        'message': 'LinkBook API is running',
        'version': '1.0.0'
    }, status=status.HTTP_200_OK)


@api_view(['GET'])
@permission_classes([AllowAny])
def api_root(request):
    """API根端点
    
    返回API的基本信息和可用端点。
    """
    return Response({
        'message': 'Welcome to LinkBook API',
        'version': 'v1',
        'endpoints': {
            'health': '/api/v1/health/',
            'auth': {
                'login': '/api/v1/auth/login/',
                'register': '/api/v1/auth/register/',
                'refresh': '/api/v1/auth/refresh/',
                'logout': '/api/v1/auth/logout/',
            },
            'users': {
                'me': '/api/v1/users/me/',
                'change_password': '/api/v1/users/change_password/',
            },
            'notes': '/api/v1/notes/',
            'categories': '/api/v1/categories/',
        }
    }, status=status.HTTP_200_OK)
